'' Title: ext/preprocessor/tuple/reverse.bi
''  This file is part of the <ext/Preprocessor> library API, and can be
''  directly included by user programs.
''
'' About: License
''  Copyright (c) 2007-2014, FreeBASIC Extended Library Development Group
''  Copyright (c) 2001, Housemarque Oy (http://www.housemarque.com)
''
''  Distributed under the Boost Software License, Version 1.0. See
''  accompanying file LICENSE_1_0.txt or copy at
''  http://www.boost.org/LICENSE_1_0.txt)
''
''  Distributed under the FreeBASIC Extended Library Group license. See
''  accompanying file LICENSE.txt or copy at
''  http://code.google.com/p/fb-extended-lib/wiki/License

# pragma once
# ifndef FBEXT_INCLUDED_PP_TUPLE_REVERSE_BI__
# define FBEXT_INCLUDED_PP_TUPLE_REVERSE_BI__ -1

# define FBEXT_PP_TUPLE_REVERSE(size, tuple) fbextPP_TupleReverse(size, tuple)

'' Macro: fbextPP_TupleReverse
''  reverses the order of elements stored in the tuple *tuple* of size *size*.
''
''  For example, if *size* is `3` and *tuple* is `(a,b,c)`, then this macro
''  expands to `(c,b,a)`.
''
'' Parameters:
''  size - is the count of elements in the tuple.
''  tuple - is the tuple to reverse.
# define fbextPP_TupleReverse(size, tuple) _
         fbextPP_TupleReverse__##size tuple

# define fbextPP_TupleReverse__1(__0) (__0)
# define fbextPP_TupleReverse__2(__0,__1) (__1, __0)
# define fbextPP_TupleReverse__3(__0,__1,__2) (__2, __1, __0)
# define fbextPP_TupleReverse__4(__0,__1,__2,__3) (__3, __2, __1, __0)
# define fbextPP_TupleReverse__5(__0,__1,__2,__3,__4) (__4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__6(__0,__1,__2,__3,__4,__5) (__5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__7(__0,__1,__2,__3,__4,__5,__6) (__6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__8(__0,__1,__2,__3,__4,__5,__6,__7) (__7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__9(__0,__1,__2,__3,__4,__5,__6,__7,__8) (__8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__10(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9) (__9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__11(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10) (__10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__12(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11) (__11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__13(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12) (__12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__14(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13) (__13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__15(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14) (__14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__16(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15) (__15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__17(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16) (__16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__18(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17) (__17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__19(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18) (__18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__20(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19) (__19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__21(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20) (__20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__22(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21) (__21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__23(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22) (__22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__24(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23) (__23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__25(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24) (__24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__26(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25) (__25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__27(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25,__26) (__26, __25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__28(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25,__26,__27) (__27, __26, __25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__29(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25,__26,__27,__28) (__28, __27, __26, __25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__30(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25,__26,__27,__28,__29) (__29, __28, __27, __26, __25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)
# define fbextPP_TupleReverse__31(__0,__1,__2,__3,__4,__5,__6,__7,__8,__9,__10,__11,__12,__13,__14,__15,__16,__17,__18,__19,__20,__21,__22,__23,__24,__25,__26,__27,__28,__29,__30) (__30, __29, __28, __27, __26, __25, __24, __23, __22, __21, __20, __19, __18, __17, __16, __15, __14, __13, __12, __11, __10, __9, __8, __7, __6, __5, __4, __3, __2, __1, __0)

# endif ' include guard
